// 将请求的目录文件放在view中
var http = require('http')
var fs = require('fs')

var template = require('art-template')
var url = require('url')

var comments = [
    {
        name: '张三',
        message: '今天天气不错',
        dateTime: '2015-10-16'
    },
    {
        name: '张三1',
        message: '今天天气不错1',
        dateTime: '2015-10-16'
    },
    {
        name: '张三2',
        message: '今天天气不错2',
        dateTime: '2015-10-16'
    },
    {
        name: '张三3',
        message: '今天天气不错3',
        dateTime: '2015-10-16'
    },
    {
        name: '张三4',
        message: '今天天气不错4',
        dateTime: '2015-10-16'
    }
]

// 对于名单提交的请求路径，由于其中有用户动态填写的内容
// 不能通过完整的url来处理请求
// 只需要判断路径是/pingjia,就认为提交表单的请求过来
http
    .createServer(function(req, res) {
        // 使用url.parse方法将路径解析成一个方便操作的对象，第二个参数为true表示将查询字符串转为一个对象
        var paseObj = url.parse(req.url, true)
        // 查询路径
        var pathName = paseObj.pathname
        console.log(pathName, 444)
        if (pathName === '/') {
            fs.readFile('./view/index.html', function (err, data) {
                if (err) {
                    return res.end('404 not found')
                }
                var htmlStr = template.render(data.toString(), {
                    comments: comments
                })
                // 当需要操作字符串数据，才需要toString()
                res.end(htmlStr)
            })
        } else if (pathName === '/post') {
            fs.readFile('./view/post.html', function(err, data) {
                if (err) {
                    return res.end('404 Not Found')
                }
                res.end(data)
            })
        } else if (pathName.indexOf('/public/') === 0) {
            console.log(333)
            // 如果请求路径以/public开头，则认为要获取public中的某个资源
            // 我们可以直接把请求路径作为文件路径进行直接读取
            // public 目录中的资源都允许被访问
            fs.readFile(`./${pathName}`, function(err, data) {
                if (err) {
                    return res.end('404 Not Found')
                }
                res.end(data)
            })
        } else if (pathName === '/pinglun') {
            var obj = paseObj.query
            obj.dateTime = '2017-11-2'
            comments.unshift(obj)


            // 1. 获取表单提交的数据
            // 2. 生成日期，存储数据到数组中
            // 3. 重定向到首页，并让用户看到新增加的数据

            // 如何通过服务器让客户端重定向？
            // 1. 状态码设置为302
                // statusCode
            // 2. 在响应头重通过Location 告诉客户端重定向
                // setHeader
            // 如果客户端发现服务器的状态码是302，会自动找Location
            // 所以客户端自动跳转
            res.statusCode = 302
            res.setHeader('Location', '/')
            res.end()
        } else {
            // 其他的都处理成404
            fs.readFile('./view/404.html', function(err, data) {
                if (err) {
                    return res.end('404 Not Found')
                }
                res.end(data)
            })
        }
    })
    .listen(3000, function () {
        console.log('running')
    })

    // Node 不适合从来没有接触过服务端的人学习
    // 如果向真正的学好服务端，还是java、php
    // Node 不适合入门服务端，不代表Node不强大
    // 不适合新手的原因是偏低层，不太灵活
    // java、php屏蔽了一些底层，好入门'